<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    let arr = [1, 2, 3, 4, 5];

    //    let newArr = arr.filter(function (ele) {
    //        return ele < 2.5
    //    });

    //    let newArr = arr.filter(ele => ele < 2.5);

    //    console.log(newArr);

    //java c++ c#  lambda表达式


    //this -> 上下文  -> context
    //箭头函数主要为了解决this指向的问题



    //    1  //谁调用this指向谁         this => obj
    var obj = {
        name: "obj",
        func: function () {
            console.log(this)
        }
    };
    obj.func();

    //2.  如果没有上级调用 默认window   this => window
    function fn() {
        console.log(this)
    }
    fn();

    /*  console.log(this);
     this.fn = function () {
     console.log(this)
     }
     this.fn();*/

    //3. 当函数作为构造函数的时候 this指向实例对象
    function Person(name) {
        this.name = name;
        this.age = '26';
    }
    Person.prototype.sayThis = function () {
        console.log(this, "Hi ,this is " + this.name);
    };
    let person = new Person("new Obj");
    person.sayThis();

    //4. call//apply//bing
    var obj = {
        year: 2020,
        birth: 1993,
        age: function () {
            console.log(this.year - this.birth)
        }
    };
    obj.age();
//    obj.age.call({year: 0,birth: 1990})


   //箭头函数实现原理










//复习和回顾

















    /*
     * 一、箭头函数是匿名函数，不能作为构造函数，不能使用new
     * 二、箭头函数内没有arguments，可以用展开运算符...解决
     * 三、箭头函数的this，始终指向父级上下文
     * 四、箭头函数不能通过call() 、 apply() 、bind()方法直接修改它的this指向。
     * 五、箭头函数没有原型属性
     * */
</script>
</body>
</html>